/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fisica;

import hibernate.Sesion;
import hibernate.objeto.AplicacionVacuna;
import java.util.Vector;
import org.hibernate.Query;

/**
 *
 * @author Gonzalo
 */
public class AplicacionVacunaFisica extends CapaFisica {

    /**
     * Retorna el objeto AplicacionVacuna según el id.
     *
     * @param id El id de la aplicacion de la vacuna
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto AplicacionVacuna consultado, null si no existe
     */
    public static AplicacionVacuna getAplicacionVacunaPorIdYPorEnBd(int id,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from AplicacionVacuna "
                + "where idAplicacionVacuna = " + id
                + " and enBdAplicacionVacuna = " + estado);

        return (AplicacionVacuna) getObjeto(q);
    }

    /**
     * Retorna el objeto AplicacionVacuna según el nombre del período de
     * vacunación, el nombre de la vacuna y el id de paciente
     *
     * @param descripcionPeriodo El nombre del período de la vacuna
     * @param nombreVacuna  El nombre de la vacuna
     * @param idPaciente El id del paciente
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto AplicacionVacuna consultado, null si no existe
     */
    public static AplicacionVacuna
            getAplicacionVacunaPorNombreVacunaPorNombrePeriodoAplicacionPorIdPacienteYPorEnBd(
            String descripcionPeriodo, String nombreVacuna, int idPaciente,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "select distinct a from AplicacionVacuna a "
                +"where a.periodoAplicacionVacuna"
                + ".descripcionPeriodoAplicacionVacuna = '" + descripcionPeriodo
                +"' and a.periodoAplicacionVacuna.vacuna.nombreVacuna = '"
                + nombreVacuna + "' and a.paciente.idPaciente = "
                + idPaciente + " and a.enBdAplicacionVacuna = " + estado);

        return (AplicacionVacuna) getObjeto(q);
        
    }

    /**
     * Retorna el objeto AplicacionVacuna según el id de período aplicación.
     *
     * @param idPeriodoAplicacion El id del paríodo aplicación
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto AplicacionVacuna consultado, null si no existe
     */
    public static AplicacionVacuna getAplicacionVacunaPorIdPeriodoAplicacionYEnBd(
            int idPeriodoAplicacion, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "select distinct a from AplicacionVacuna a "
                +"where a.periodoAplicacionVacuna"
                + ".idPeriodoAplicacionVacuna = "
                + idPeriodoAplicacion + " and a.enBdAplicacionVacuna = " + estado);

        return (AplicacionVacuna) getObjeto(q);

    }

    /**
     * Retorna el vector de AplicacionVacuna según el nombre de la vacuna
     * y el id de paciente
     *
     * @param nombreVacuna  El nombre de la vacuna
     * @param idPaciente El id del paciente
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto AplicacionVacuna consultado, null si no existe
     */
    public static Vector<AplicacionVacuna>
            getVectorAplicacionVacunaPorNombreVacunaYPorIdPacienteYEnBd(
            String nombreVacuna, int idPaciente, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from AplicacionVacuna a "
                + "where a.periodoAplicacionVacuna.vacuna.nombreVacuna = '"
                + nombreVacuna
                + "' and a.paciente.idPaciente = " + idPaciente
                + " and a.enBdAplicacionVacuna = " + estado);

        return (Vector<AplicacionVacuna>) getVectorObjetos(q);
    }

    /**
     * Retorna el vector de AplicacionVacuna según el id de paciente
     *
     * @param idPaciente El id del paciente
     * @return El objeto AplicacionVacuna consultado, null si no existe
     */
    public static Vector<AplicacionVacuna> getVectorAplicacionVacunaPorIdPaciente(
            int idPaciente) {
        Query q = Sesion.sesion.createQuery(
                "from AplicacionVacuna a " +
                "where a.paciente.idPaciente = " + idPaciente
                );

        return (Vector<AplicacionVacuna>) getVectorObjetos(q);
    }

}
